// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#ifndef LIBGO_SLICE_H
#define LIBGO_SLICE_H

struct __go_open_array;
struct __go_type_descriptor;

// We should be OK if we don't split the stack here, since the only
// libc functions we call are memcpy and memmove.  If we don't do
// this, we will always split the stack, because of memcpy and
// memmove.
extern struct __go_open_array __go_append(struct __go_open_array, void *, uintptr, uintptr) __attribute__ ((no_split_stack));

extern struct __go_open_array __go_make_slice2 (const struct __go_type_descriptor *td, uintptr len, uintptr cap);
extern struct __go_open_array __go_make_slice1 (const struct __go_type_descriptor *td, uintptr len);
extern struct __go_open_array __go_make_slice2_big (const struct __go_type_descriptor *td, uint64 len, uint64 cap);
extern struct __go_open_array __go_make_slice1_big (const struct __go_type_descriptor *td, uint64 len);

#endif /* !defined(LIBGO_SLICE_H) */
